<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html>
<head>
<title>Dialogs</title>
<link rel="stylesheet" href="/cfg/format.css" type="text/css">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="keywords" content="GUI, dialogs, Swing, Jython">
<meta name="description" content="Dialogs">
<meta name="language" content="en">
<meta name="author" content="Jan Bodnar">
<meta name="distribution" content="global">

<script type="text/javascript" src="/lib/jquery.js"></script>
<script type="text/javascript" src="/lib/common.js"></script>

</head>

<body>

<div class="container">

<div id="wide_ad" class="ltow">
<script type="text/javascript"><!--
google_ad_client = "pub-9706709751191532";
/* 160x600, August 2011 */
google_ad_slot = "2484182563";
google_ad_width = 160;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>

<div class="content">


<a href="/" title="Home">Home</a>&nbsp;
<a href="..">Contents</a>


<h1>Dialogs</h1>

<p>
In this part of the Jython Swing programming tutorial, we will work with dialogs. 
</p>

<div class="center"> 
<script type="text/javascript"><!--
google_ad_client = "pub-9706709751191532";
/* horizontal */
google_ad_slot = "1734478269";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script> 
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> 
</script> 
</div> 

<p>
Dialog windows or dialogs are an indispensable part of most modern GUI applications. 
A dialog is defined as a conversation between two or more persons. In a computer 
application a dialog is a window which is used to "talk" to the application. 
A dialog is used to input data, modify data, change the application settings etc. 
Dialogs are important means of communication between a user and a computer program. 
</p>


<h2>Message boxes</h2>

<p>
Message boxes are convenient dialogs that provide messages to the user of the application. 
The message consists of text and image data. 
</p>

<pre class="code">
#!/usr/local/bin/jython
# -*- coding: utf-8 -*-

"""
ZetCode Jython Swing tutorial

In this program, we show various
message boxes.

author: Jan Bodnar
website: www.zetcode.com
last modified: November 2010
"""

from java.awt import GridLayout
from javax.swing import JButton
from javax.swing import JFrame
from javax.swing import JOptionPane
from javax.swing import JPanel



class Example(JFrame):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):

        self.panel = JPanel()
        self.panel.setLayout(GridLayout(2, 2))

        error = JButton("Error", actionPerformed=self.onError)
        warning = JButton("Warning", actionPerformed=self.onWarning)
        question = JButton("Question", actionPerformed=self.onQuestion)
        inform = JButton("Information", actionPerformed=self.onInform)
    

        self.panel.add(error)
        self.panel.add(warning)
        self.panel.add(question)
        self.panel.add(inform)

        self.add(self.panel)

        self.setTitle("Message boxes")
        self.setSize(300, 200)
        self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
        self.setLocationRelativeTo(None)
        self.setVisible(True)


    def onError(self, e):
        JOptionPane.showMessageDialog(self.panel, "Could not open file",
            "Error", JOptionPane.ERROR_MESSAGE)

    def onWarning(self, e):
        JOptionPane.showMessageDialog(self.panel, "A deprecated call",
            "Warning", JOptionPane.WARNING_MESSAGE)

    def onQuestion(self, e):
        JOptionPane.showMessageDialog(self.panel, "Are you sure to quit?",
            "Question", JOptionPane.QUESTION_MESSAGE)

    def onInform(self, e):
        JOptionPane.showMessageDialog(self.panel, "Download completed",
            "Information", JOptionPane.INFORMATION_MESSAGE)

if __name__ == '__main__':
    Example()
</pre>

<p>
We use the <code>GridLayout</code> manager to set up a grid of
four buttons. Each of the buttons shows a different message box. 
</p>


<pre class="explanation">
def onError(self, e):
    JOptionPane.showMessageDialog(self.panel, "Could not open file",
        "Error", JOptionPane.ERROR_MESSAGE)
</pre>

<p>
In case we pressed the error button, we show the error dialog. 
We use the <code>showMessageDialog()</code> method to show the dialog 
on the screen. The first parameter of this method is the frame, in which
the dialog is displayed. The second parameter is the message to be
displayed. The third parameter is the title of the dialog. The
final parameter is the message type. The default icon is determined
by the message type. In our case, we have <code>ERROR_MESSAGE</code> 
message type for the error dialog.
</p>


<br>
<img src="/img/gui/jrubyswing/errordlg.png" alt="Error message dialog">
<div class="figure">Figure: Error message dialog</div>


<h2>JColorChooser</h2>

<p>
The <code>JColorChooser</code> is a standard dialog for selecting a color.
</p>

<pre class="code">
#!/usr/local/bin/jython
# -*- coding: utf-8 -*-

"""
ZetCode Jython Swing tutorial

In this program, we use the
JColorChooser to change the color
of a panel.

author: Jan Bodnar
website: www.zetcode.com
last modified: November 2010
"""

from java.awt import BorderLayout
from java.awt import Color
from javax.swing import BorderFactory
from javax.swing import JColorChooser
from javax.swing import JButton
from javax.swing import JToolBar
from javax.swing import JPanel
from javax.swing import JFrame


class Example(JFrame):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):

        self.panel = JPanel()
        self.panel.setLayout(BorderLayout())

        toolbar = JToolBar()
        openb = JButton("Choose color", actionPerformed=self.onClick)

        toolbar.add(openb)

        self.display = JPanel()
        self.display.setBackground(Color.WHITE)

        self.panel.setBorder(BorderFactory.createEmptyBorder(30, 50, 30, 50))
        self.panel.add(self.display)
        self.add(self.panel)

        self.add(toolbar, BorderLayout.NORTH)


        self.setTitle("Color chooser")
        self.setSize(300, 250)
        self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
        self.setLocationRelativeTo(None)
        self.setVisible(True)


    def onClick(self, e):

        clr = JColorChooser()
        color = clr.showDialog(self.panel, "Choose Color", Color.white)
        self.display.setBackground(color)


if __name__ == '__main__':
    Example()
</pre>


<p>
In the example, we have a white panel in the center of the window. We will 
change the background color of the panel by selecting a color from 
the color chooser dialog.
</p>

<pre class="explanation">
clr = JColorChooser()
color = clr.showDialog(self.panel, "Choose Color", Color.white)
self.display.setBackground(color)
</pre>

<p>
This code shows a color chooser dialog. The <code>showDialog()</code> method returns the
selected color value. We change the display panel background to the newly selected color.
</p>


<br>
<img src="/img/gui/jrubyswing/colordlg.png" alt="ColorDialog">
<div class="figure">Figure: ColorDialog</div>



<h2>JFileChooser</h2>

<p>
<b class="keyword">JFileChooser</b> dialog allows user to select a file from
the filesystem. 
</p>

<pre class="code">
#!/usr/local/bin/jython
# -*- coding: utf-8 -*-

"""
ZetCode Jython Swing tutorial

In this program, we use the
JFileChooser to select a file from
a filesystem.

author: Jan Bodnar
website: www.zetcode.com
last modified: November 2010
"""

from java.awt import BorderLayout

from javax.swing import BorderFactory
from javax.swing import JFileChooser
from javax.swing import JTextArea
from javax.swing import JScrollPane
from javax.swing import JButton
from javax.swing import JToolBar
from javax.swing import JPanel
from javax.swing import JFrame
from javax.swing.filechooser import FileNameExtensionFilter


class Example(JFrame):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):

        self.panel = JPanel()
        self.panel.setLayout(BorderLayout())

        toolbar = JToolBar()
        openb = JButton("Choose file", actionPerformed=self.onClick)

        toolbar.add(openb)

        self.area = JTextArea()
        self.area.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10))

        pane = JScrollPane()
        pane.getViewport().add(self.area)

        self.panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10))
        self.panel.add(pane)
        self.add(self.panel)

        self.add(toolbar, BorderLayout.NORTH)


        self.setTitle("File chooser")
        self.setSize(300, 250)
        self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
        self.setLocationRelativeTo(None)
        self.setVisible(True)


    def onClick(self, e):

        chooseFile = JFileChooser()
        filter = FileNameExtensionFilter("c files", ["c"])
        chooseFile.addChoosableFileFilter(filter)

        ret = chooseFile.showDialog(self.panel, "Choose file")

        if ret == JFileChooser.APPROVE_OPTION:
            file = chooseFile.getSelectedFile()
            text = self.readFile(file)
            self.area.setText(text)


    def readFile(self, file):
        filename = file.getCanonicalPath()
        f = open(filename, "r")
        text = f.read()
        return text


if __name__ == '__main__':
    Example()
</pre>

<p>
In our code example, we use the <code>JFileChooser</code> dialog to 
select a C file and display its contents in a <code>JTextArea</code>.
</p>

<pre class="explanation">
self.area = JTextArea()
</pre>

<p>
This is the <code>JTextArea</code> in which we will show the contents
of a selected file. 
</p>

<pre class="explanation">
chooseFile = JFileChooser()
filter = FileNameExtensionFilter("c files", ["c"])
chooseFile.addChoosableFileFilter(filter)
</pre>

<p>
We create an instance of the <code>JFileChooser</code> dialog. We create 
a filter which will show only C files. 
</p>

<pre class="explanation">
ret = chooseFile.showDialog(self.panel, "Choose file")
</pre>

<p>
The dialog is shown on the screen. We get the return value. 
</p>

<pre class="explanation">
if ret == JFileChooser.APPROVE_OPTION:
    file = chooseFile.getSelectedFile()
    text = self.readFile(file)
    self.area.setText(text)
</pre>

<p>
If the user has selected a file, we get the name of the file.
Read its contents and set the text to the text area component. 
</p>

<pre class="explanation">
def readFile(self, file):
    filename = file.getCanonicalPath()
    f = open(filename, "r")
    text = f.read()
    return text
</pre>

<p>
This code reads the text from the file. The <code>getCanonicalPath()</code>
returns an absolute file name. 
</p>

<br>
<img src="/img/gui/jrubyswing/filedlg.png" alt="JFileChooser">
<div class="figure">Figure: JFileChooser</div>

<hr class="btm">

<p>
In this part of the Jython Swing tutorial, we worked with dialog windows. 
</p>

<br>
<div class="center"> 
<script type="text/javascript"><!--
google_ad_client = "pub-9706709751191532";
/* horizontal */
google_ad_slot = "1734478269";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script> 
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> 
</script> 
</div> 
<br>



<div class="botNav, center">
<span class="botNavItem"><a href="/">Home</a></span> ‡ <span class="botNavItem"><a href="..">Contents</a></span> ‡ 
<span class="botNavItem"><a href="#">Top of Page</a></span>
</div>


<div class="footer">
<div class="signature">
<a href="/">ZetCode</a> last modified December 15, 2010  <span class="copyright">&copy; 2007 - 2012 Jan Bodnar</span>
</div>
</div>

</div> <!-- content -->

</div> <!-- container -->

</body>
</html>

